// type First<T extends any[]> = T extends []?never:T[0];
// type First<T extends any[]> = T["length"] extends 0?never:T[0];
//3.
// type First<T extends any[]> = T[0] extends T[number]?T[0]:never;
//4.
type First<T extends any[]> = T extends [infer First,...infer Rest]?First:never;


// type Tail<T extends any[]> = T extends [infer First,...infer Rest]?Rest:never;
// type t4 = Tail<[1,2,3]>


//3.
// type ages = [1,2,3]
// type t1 = ages[number]

// type t2 = 1 extends ages[number]?"true":"false"

//js
// const first = (arr)=>{
    // const[first,...rest] = arr;
    // return first?first:"never"
//     if (arr.length === 0){
//         return 'never';
//     }
//     return arr[0];
// }

//1.extends 类型条件判断
//2.获取 tuple 的 length 属性
//3.extends union 判断的规则
//4.inter的使用(推断)

//2.
// type t1 = First<[]>
//如果是一个【】空数组，那么获取的【0】是undefined